﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
namespace webnew.BLL
{
   public  class Sys_Dept
    {
       private readonly webnew.DAL.Sys_DeptHelper dal = new webnew.DAL.Sys_DeptHelper();
        public Sys_Dept()
		{ }

        /// <summary>
		/// 增加一条数据
		/// </summary>
        public int Add(webnew.Model.Sys_DeptInfo model)
        {
            CheckModel(model);
           return dal.Add(model);
        }

        /// <summary>
		/// 更新一条数据
		/// </summary>
        public int Update(webnew.Model.Sys_DeptInfo model)
        {
            CheckModel(model);
            return dal.Modify(model);
        }

        /// <summary>
        /// 根据ID删除一条数据
        /// </summary>
        public int del(string id)
        {          
            return dal.Del(id);
        } 

        /// <summary>
		/// 获得泛型数据列表（存在的所有数据）
		/// </summary>
        public List<webnew.Model.Sys_DeptInfo> GetList()
        {
            return dal.GetList();
        }

        /// <summary>
        /// 根据条件获得泛型数据列表
        /// </summary>
        public List<webnew.Model.Sys_DeptInfo> GetconList(string condition)
        {
            return dal.GetconList(condition);
        }

      


       /// <summary>
       /// 根据用户ID返回一个实体
       /// </summary>
        public webnew.Model.Sys_DeptInfo GetList(string id)
        {
            return dal.GetModel(id);
        }

        /// <summary>
        /// 取得数据行数,不建议直接使用此方法,请根据业务逻辑重写
        /// </summary>
        public int GetCount(string strTable,string condition)
        {
            return dal.GetCount(strTable, condition);
        }

        /// <summary>
		/// 分页获取泛型数据列表,不建议直接使用此方法,请根据业务逻辑重写
		/// </summary>
        public SqlDataReader GetPageList(string field,string condition, int pageSize, int pageIndex, string tbNames, string sortNames, bool sortType)
        {
            if (pageSize <= 0)
                throw new Exception("每页数据条数必须大于0。");

            if (pageIndex <= 0)
                throw new Exception("页索引必须大于0。");

            if (string.IsNullOrEmpty(sortNames))
                throw new Exception("排序字段不能为空。如果是默认排序，可以填写主键字段。");
            return dal.GetPageList( field,condition, pageSize, pageIndex, tbNames, sortNames, sortType);
        }

		#region 验证参数的有效性，请在此加入更多业务逻辑的验证

		/// <summary>
		/// 验证实体的有效性
		/// </summary>
        private void CheckModel(webnew.Model.Sys_DeptInfo model)
		{
			if (model == null)
				throw new ArgumentNullException("参数不能为空。");

			if (!Regex.IsMatch(model.deptname, @"^[\s\w\u4e00-\u9fa5]{1,50}$"))
				throw new ArgumentException("Name格式不正确。");
		}

        private void CheckConditionArgument(int ID)
        {
        }
        #endregion


       ////////////////////////////////////////////////////////////
        /// <summary>
        /// 获取OA部门
        /// </summary>
        public List<Model.Sys_DeptInfo> GetOADept(string compid)
        {
            return dal.GetOADept(compid);
        }
       /// <summary>
       /// 根据公司ID获取部名信息
       /// </summary>
       /// <param name="compid">公司ID</param>
       /// <returns>部门列表</returns>
        public List<Model.Sys_DeptInfo> GetDeptByCompID(string compid)
        {
            return dal.GetDeptByCompID(compid);
        }
           
        /// <summary>
        /// 根据用户ID返回部门列表
        /// </summary>
        public List<webnew.Model.Sys_DeptInfo> GetDeptListByComp(string compid)
        {
            return dal.GetDeptListByComp(compid);
        }

   

        /// <summary>
        /// 根据选中的部门ID,判断是否能删除
        /// </summary>
        /// <param name="CompIds">选中的部门ID</param>
        /// <returns>返回false 表示不能删除;返回true 表示可以删除</returns>
        public bool isCanDel(string DeptIds)
        {
            return dal.isCanDel(DeptIds);
        }


       ///////////////////////////////new///////////////////////////////////////////
        /// <summary>
        /// 获取指定级别部门列表(一级,二级)
        /// </summary>
        public List<Model.Sys_DeptInfo> GetDeptByLevel(string strLevel)
        {
            return dal.GetDeptByLevel(strLevel);
        }

        /// <summary>
        /// 根据公司ID,部门级别获取 部门列表
        /// </summary>
        public List<Model.Sys_DeptInfo> GetDeptByCompLev(string strCompId, string strLevel)
        {
            return dal.GetDeptByCompLev(strCompId, strLevel);
        }

        /// <summary>
        /// 根据输入的部门名,部门级别,所属单位Id判断是否存在该部门名
        /// </summary>
        /// <param name="DeptName">部门名</param>
        /// <param name="strLevel">部门级别</param> 
        /// <param name="strCompId">所属单位Id</param> 
        /// <returns>返回string "1"代表存在,"0"代表不存在</returns>
        public string ExistDeptName(string DeptName, string strLevel, string strCompId)
        {
            return dal.ExistDeptName(DeptName, strLevel, strCompId);
        }
    }
}
